package com.lzh.others.basejava.Thread_21.bilibili_course_thread;

import com.lzh.others.basejava.Thread_21.utils.SmallTool;

import java.util.concurrent.CompletableFuture;

/**
 * @Description: * 场景5：
 * * 小白进入餐厅吃饭，点了饭后等待厨师做饭，这个期间玩王者，菜做好了后，
 * 厨师交给->服务员A,服务员A准备去打饭，突然被老板喊道，有急事需要去处理，服务员A将后续任务交给服务员B
 * 服务员B,d打饭，最后把饭菜一起端给->小白开始吃饭。
 *
 *
 * @Author: LiuZiHao
 * @Date: 2023/1/10 17:26
 */
public class CompletableFuturePrac_05 {
    public static void main(String[] args) {
        SmallTool.printTimeAndThread("小白进入餐厅");
        SmallTool.printTimeAndThread("小白点了 青椒肉丝 + 一碗米饭");
        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndThread("厨师炒菜");
            SmallTool.sleepMillis(200);
//            SmallTool.printTimeAndThread("厨师打饭");
//            SmallTool.sleepMillis(200);
            return "青椒肉丝";
        }).thenComposeAsync(dish ->
                {
                    SmallTool.printTimeAndThread("服务员A 准备打饭，但是被领导叫走，打饭交给服务员B");
                    return CompletableFuture.supplyAsync(() -> {
                        SmallTool.printTimeAndThread("服务员B 打饭");
                        SmallTool.sleepMillis(1000);
                        return dish + " + 米饭";
                    });
                }

        );

        SmallTool.printTimeAndThread("小白在打王者");
        SmallTool.printTimeAndThread(String.format("%s,小白开吃", cf1.join()));
    }
}
